package com.virtualperson.dto;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.util.List;

@Data
@JsonIgnoreProperties(ignoreUnknown = true)  // 忽略未知字段
public class StyleGenerationResponse {
    @JsonProperty("request_id")
    private String requestId;
    private Output output;
    private String code;    // 错误码，仅在失败时返回
    private String message; // 错误信息，仅在失败时返回

    @Data
    @JsonIgnoreProperties(ignoreUnknown = true)  // 忽略未知字段
    public static class Output {
        @JsonProperty("task_id")
        private String taskId;
        
        @JsonProperty("task_status")
        private String status;      // 任务状态
        
        @JsonProperty("image_url")
        private String imageUrl;    // 成功时返回的图片URL

        @JsonProperty("submit_time")
        private String submitTime;  // 提交时间

        @JsonProperty("scheduled_time")
        private String scheduledTime;  // 计划执行时间

        @JsonProperty("start_time")
        private String startTime;  // 开始时间

        @JsonProperty("end_time")
        private String endTime;  // 结束时间

        @JsonProperty("error_code")
        private Integer errorCode;  // 错误码

        @JsonProperty("error_message")
        private String errorMessage;  // 错误信息

        @JsonProperty("style_index")
        private Integer styleIndex;  // 风格索引

        private List<Result> results;  // 生成结果列表

        private String message;     // 任务状态描述或错误信息
    }

    @Data
    @JsonIgnoreProperties(ignoreUnknown = true)  // 忽略未知字段
    public static class Result {
        private String url;  // 生成的图片URL
    }

    // 任务状态常量
    public static final String STATUS_PENDING = "PENDING";    // 排队中
    public static final String STATUS_RUNNING = "RUNNING";    // 处理中
    public static final String STATUS_SUSPENDED = "SUSPENDED"; // 挂起
    public static final String STATUS_SUCCEEDED = "SUCCEEDED"; // 执行成功
    public static final String STATUS_FAILED = "FAILED";      // 执行失败
    public static final String STATUS_UNKNOWN = "UNKNOWN";    // 任务不存在或状态未知

    /**
     * 检查任务是否完成
     * @return true 如果任务已完成（成功或失败）
     */
    public boolean isCompleted() {
        return STATUS_SUCCEEDED.equals(output.getStatus()) || 
               STATUS_FAILED.equals(output.getStatus());
    }

    /**
     * 检查任务是否成功
     * @return true 如果任务成功完成
     */
    public boolean isSuccessful() {
        return STATUS_SUCCEEDED.equals(output.getStatus());
    }

    /**
     * 检查任务是否失败
     * @return true 如果任务失败
     */
    public boolean isFailed() {
        return STATUS_FAILED.equals(output.getStatus());
    }

    /**
     * 获取生成的图片URL
     * @return 生成的图片URL，如果有多个结果则返回第一个
     */
    public String getGeneratedImageUrl() {
        if (output != null && output.getResults() != null && !output.getResults().isEmpty()) {
            return output.getResults().get(0).getUrl();
        }
        return output != null ? output.getImageUrl() : null;
    }
} 